microcad-lang-parse 0.5.0

µcad language syntax lexer and parser
Documentation
---
source: crates/syntax/tests/parser.rs
expression: parse(input)
---
Ok(
    Program {
        span: 0..34,
        statements: StatementList {
            span: 0..34,
            extras: ItemExtras {
                leading: LeadingExtras(
                    [],
                ),
                trailing: TrailingExtras(
                    [],
                ),
            },
            statements: [
                (
                    Function(
                        FunctionDefinition {
                            span: 0..34,
                            keyword_span: 0..2,
                            extras: ItemExtras {
                                leading: LeadingExtras(
                                    [],
                                ),
                                trailing: TrailingExtras(
                                    [],
                                ),
                            },
                            doc: DocBlock {
                                span: 0..34,
                                lines: [],
                            },
                            attributes: [],
                            visibility: None,
                            name: Identifier {
                                span: 3..6,
                                name: "foo",
                            },
                            parameters: ParameterList {
                                span: 7..25,
                                extras: ItemExtras {
                                    leading: LeadingExtras(
                                        [],
                                    ),
                                    trailing: TrailingExtras(
                                        [],
                                    ),
                                },
                                parameters: [
                                    Parameter {
                                        span: 7..16,
                                        extras: ItemExtras {
                                            leading: LeadingExtras(
                                                [],
                                            ),
                                            trailing: TrailingExtras(
                                                [],
                                            ),
                                        },
                                        name: Identifier {
                                            span: 7..8,
                                            name: "a",
                                        },
                                        ty: Some(
                                            Single(
                                                SingleType {
                                                    span: 10..16,
                                                    name: "Length",
                                                },
                                            ),
                                        ),
                                        default: None,
                                    },
                                    Parameter {
                                        span: 17..25,
                                        extras: ItemExtras {
                                            leading: LeadingExtras(
                                                [
                                                    Whitespace(
                                                        " ",
                                                    ),
                                                ],
                                            ),
                                            trailing: TrailingExtras(
                                                [],
                                            ),
                                        },
                                        name: Identifier {
                                            span: 18..19,
                                            name: "b",
                                        },
                                        ty: None,
                                        default: Some(
                                            Literal(
                                                Literal {
                                                    span: 22..25,
                                                    extras: ItemExtras {
                                                        leading: LeadingExtras(
                                                            [],
                                                        ),
                                                        trailing: TrailingExtras(
                                                            [],
                                                        ),
                                                    },
                                                    literal: Quantity(
                                                        QuantityLiteral {
                                                            span: 22..25,
                                                            value: 3.0,
                                                            raw: "3",
                                                            unit: Unit {
                                                                span: 23..25,
                                                                name: "mm",
                                                            },
                                                        },
                                                    ),
                                                },
                                            ),
                                        ),
                                    },
                                ],
                            },
                            return_type: None,
                            body: Body {
                                span: 27..34,
                                statements: StatementList {
                                    span: 28..33,
                                    extras: ItemExtras {
                                        leading: LeadingExtras(
                                            [],
                                        ),
                                        trailing: TrailingExtras(
                                            [],
                                        ),
                                    },
                                    statements: [],
                                    tail: Some(
                                        ExpressionStatement {
                                            span: 28..33,
                                            extras: ItemExtras {
                                                leading: LeadingExtras(
                                                    [],
                                                ),
                                                trailing: TrailingExtras(
                                                    [],
                                                ),
                                            },
                                            attributes: [],
                                            expression: BinaryOperation(
                                                BinaryOperation {
                                                    span: 28..33,
                                                    lhs: QualifiedName(
                                                        QualifiedName {
                                                            span: 28..29,
                                                            extras: ItemExtras {
                                                                leading: LeadingExtras(
                                                                    [],
                                                                ),
                                                                trailing: TrailingExtras(
                                                                    [
                                                                        Whitespace(
                                                                            " ",
                                                                        ),
                                                                    ],
                                                                ),
                                                            },
                                                            parts: [
                                                                Identifier {
                                                                    span: 28..29,
                                                                    name: "b",
                                                                },
                                                            ],
                                                        },
                                                    ),
                                                    operation: BinaryOperator {
                                                        span: 30..31,
                                                        operation: Divide,
                                                    },
                                                    rhs: QualifiedName(
                                                        QualifiedName {
                                                            span: 32..33,
                                                            extras: ItemExtras {
                                                                leading: LeadingExtras(
                                                                    [],
                                                                ),
                                                                trailing: TrailingExtras(
                                                                    [],
                                                                ),
                                                            },
                                                            parts: [
                                                                Identifier {
                                                                    span: 32..33,
                                                                    name: "a",
                                                                },
                                                            ],
                                                        },
                                                    ),
                                                },
                                            ),
                                        },
                                    ),
                                },
                            },
                        },
                    ),
                    TrailingExtras(
                        [],
                    ),
                ),
            ],
            tail: None,
        },
    },
)